package com.sky.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 1.这个类设计的目的：
 *      为了在方法调用后统一返回结果，使得调用者可以方便地判断操作是否成功，并获取相应的结果数据或错误信息。
 *
 * 2.T是一个泛型类型参数
 *      通过使用泛型类型参数T，Result类可以适应不同的数据类型。
 *      这意味着可以创建Result对象来存储各种【不同类型】的数据，而不仅仅局限于特定的一种类型。
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {

    private Integer code; //编码：1成功，0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

    public static <T> Result<T> success() {
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    /**1.成功，带一个任意类型的参数，T 都可以接收
     * 2.在方法中，new 了一个 result 的对象
     *      设置了它的 data 属性为 object, code 属性为 1
     *      最后返回这个 result 对象
     * @param object
     * @return
     * @param <T>
     */
    public static <T> Result<T> success(T object) {
        Result<T> result = new Result<>();
        result.data = object;
        result.code = 1;  // 调用success(), code值为1，object值则封装到data中
        return result;
    }

    public static <T> Result<T> error(String msg) {
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}
